package org.protobuf.chapter2;

import java.util.ArrayList;
import java.util.List;

import org.protobuf.chapter2.SubscribeReqProto.SubscribeReq;

import com.google.protobuf.InvalidProtocolBufferException;

/**
 * @Description	http://www.cnblogs.com/crazylqy/p/4901369.html
 * 
 * 	System.out.println("采用UTF-8字符集进行解码:");
    String keyWord = URLDecoder.decode("%E5%A4%A9%E6%B4%A5%E5%A4%A7%E5%AD%A6+Rico", "UTF-8");
    System.out.println(keyWord);
    System.out.println("\n 采用GBK字符集进行解码:");
    System.out.println(URLDecoder.decode("%E5%A4%A9%E6%B4%A5%E5%A4%A7%E5%AD%A6+Rico", "UTF-8"));
 * @ClassName	TestSubscribeReqProto
 * @Date		2018年1月11日 上午10:55:48
 * @Author		liangjl
 * @Copyright (c) All Rights Reserved, 2018.
 */
public class TestSubscribeReqProto {

	/**
	 * @Description 加码
	 * @Author		liangjl
	 * @Date		2018年1月11日 上午10:56:59
	 * @param req
	 * @return 参数
	 * @return byte[] 返回类型 
	 * @throws
	 */
	private static byte[] encode(SubscribeReqProto.SubscribeReq req) {
		return req.toByteArray();
	}

	
	/**
	 * @Description 解码时通过SubscribeReqProto.SubscribeReq的静态方法parseFrom将二进制byte数组解码为原始的对象。
		由于Protobuf支持复杂POJO对象编解码，所以代码都是通过工具自动生成，相比于传统的POJO对象的赋值操作，其使用略微复杂一些，但是习惯之后也不会带来额外的工作量，主要差异还是编程习惯的不同。	
	 * @Author		liangjl
	 * @Date		2018年1月11日 上午10:56:43
	 * @param body
	 * @return
	 * @throws InvalidProtocolBufferException 参数
	 * @return SubscribeReqProto.SubscribeReq 返回类型 
	 * @throws
	 */
	private static SubscribeReq decode(byte[] body) throws InvalidProtocolBufferException {
		return SubscribeReqProto.SubscribeReq.parseFrom(body);
	}

	private static SubscribeReq createSubscribeReq() {
		SubscribeReqProto.SubscribeReq.Builder builder = SubscribeReqProto.SubscribeReq.newBuilder();
		builder.setSubReqID(1);
		builder.setUserName("Lilinfeng");
		builder.setProductName("Netty Book");
		List<String> address = new ArrayList<>();
		address.add("NanJing YuHuaTai");
		address.add("BeiJing LiuLiChang");
		address.add("ShenZhen HongShuLin");
		builder.addAllAddress(address);
		return builder.build();
	}

	/**
	 * @param args
	 * @throws InvalidProtocolBufferException
	 */
	public static void main(String[] args) throws Exception {
		//加码
		SubscribeReqProto.SubscribeReq req = createSubscribeReq();
		System.out.println("Before encode : " + req.toString());
		System.out.println("encode : " + encode(req));
		//解码
		SubscribeReqProto.SubscribeReq req2 = decode(encode(req));
		System.out.println("After decode : " + req.toString());
		System.out.println("Assert equal : --> " + req2.equals(req));
		
		System.out.println(~6);//-7

	}

}